﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace CoTuong
{
    [Serializable]
    public class QuanXe: QuanCo
    {
        public QuanXe(Texture2D texture2D, int dong, int cot, int quan, Boolean isSelected)
            : base(texture2D, dong, cot, quan, isSelected)
        {

        }

        public override void Update(GameTime gameTime)
        {
            if (isSelected == true)
            {
                #region Kiểm Tra và di chuyển bên dưới xe
                for (int i = dong + 1; i < 10; i++)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                            break;
                    }

                    this.diChuyen(i, cot);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                        break;
                }
                #endregion

                #region Kiểm Tra và di chuyển bên trên xe
                for (int i = dong - 1; i >= 0; i--)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                            break;
                    }

                    this.diChuyen(i, cot);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                        break;

                }
                #endregion

                #region Kiểm Tra và di chuyển bên phải xe
                for (int i = cot + 1; i < 9; i++)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                            break;
                    }

                    this.diChuyen(dong, i);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                        break;

                }
                #endregion

                #region Kiểm Tra và di chuyển bên trái xe
                for (int i = cot - 1; i >= 0; i--)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                            break;
                    }

                    this.diChuyen(dong, i);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                        break;

                }
                #endregion

                ViTriDiChuyen.X = -framesizeX;
                ViTriDiChuyen.Y = -framesizeY;

            }

            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            if (isSelected == true) 
            {//Vẽ các vị trí di chuyển được của xe
                #region Vẽ Vị Trí Bên Dưới Xe
                for (int i = dong + 1; i < 10; i++)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                            break;
                    }
                    this.VeBuocDiQuanCo(i, cot, spriteBatch);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                        break;
                }
                #endregion

                #region Vẽ Vị Trí Bên Trên Xe
                for (int i = dong - 1; i >= 0; i--)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                            break;
                    }
                    this.VeBuocDiQuanCo(i, cot, spriteBatch);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[i, cot] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[i, cot] == 1)
                        break;
                }
                #endregion

                #region Vẽ Vị Trí Bên Phải Xe
                for (int i = cot + 1; i < 9; i++)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                            break;
                    }
                    this.VeBuocDiQuanCo(dong, i, spriteBatch);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                        break;

                }
                #endregion

                #region Vẽ Vị Trí Bên Trái Xe
                for (int i = cot - 1; i >= 0; i--)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                            break;
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                            break;
                    }
                    this.VeBuocDiQuanCo(dong, i, spriteBatch);

                    if (quan == 0 && QuanLyQuanCo.ktQuanCo[dong, i] == 2)
                        break;
                    if (quan == 1 && QuanLyQuanCo.ktQuanCo[dong, i] == 1)
                        break;
                }
                #endregion
            }

            base.Draw(gameTime, spriteBatch);
        }

    }
}
